Print erratum application report for CVE-2017-5715
authorDimitris Papastamos <[email protected]>
Tue, 16 Jan 2018 10:32:47 +0000 (10:32 +0000)
committerDimitris Papastamos <[email protected]>
Thu, 18 Jan 2018 10:36:10 +0000 (10:36 +0000)
Even though the workaround for CVE-2017-5715 is not a CPU erratum, the
code is piggybacking on the errata framework to print whether the
workaround was applied, missing or not needed.

Change-Id: I821197a4b8560c73fd894cd7cd9ecf9503c72fa3
Signed-off-by: Dimitris Papastamos <[email protected]>
lib/cpus/aarch64/cortex_a57.S
lib/cpus/aarch64/cortex_a72.S
lib/cpus/aarch64/cortex_a73.S
lib/cpus/aarch64/cortex_a75.S

index 683be47e5203dacb439782e354ceaab12425ca09..c82ebfc95179a29f33f27b105f4ca2475447b016 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -328,6 +328,15 @@ func check_errata_859972
        b       cpu_rev_var_ls
 endfunc check_errata_859972
 
+func check_errata_cve_2017_5715
+#if WORKAROUND_CVE_2017_5715
+       mov     x0, #ERRATA_APPLIES
+#else
+       mov     x0, #ERRATA_MISSING
+#endif
+       ret
+endfunc check_errata_cve_2017_5715
+
        /* -------------------------------------------------
         * The CPU Ops reset function for Cortex-A57.
         * Shall clobber: x0-x19
@@ -518,7 +527,7 @@ func cortex_a57_errata_report
        report_errata ERRATA_A57_829520, cortex_a57, 829520
        report_errata ERRATA_A57_833471, cortex_a57, 833471
        report_errata ERRATA_A57_859972, cortex_a57, 859972
-
+       report_errata WORKAROUND_CVE_2017_5715, cortex_a57, cve_2017_5715
 
        ldp     x8, x30, [sp], #16
        ret
index 93821b7493f3e4b192a707e09ec3dc99e499bb39..9633aa8f54b55c52d981df5eabbd74129e2f0af7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -97,6 +97,15 @@ func check_errata_859971
        b       cpu_rev_var_ls
 endfunc check_errata_859971
 
+func check_errata_cve_2017_5715
+#if WORKAROUND_CVE_2017_5715
+       mov     x0, #ERRATA_APPLIES
+#else
+       mov     x0, #ERRATA_MISSING
+#endif
+       ret
+endfunc check_errata_cve_2017_5715
+
        /* -------------------------------------------------
         * The CPU Ops reset function for Cortex-A72.
         * -------------------------------------------------
@@ -249,6 +258,7 @@ func cortex_a72_errata_report
         * checking functions of each errata.
         */
        report_errata ERRATA_A72_859971, cortex_a72, 859971
+       report_errata WORKAROUND_CVE_2017_5715, cortex_a72, cve_2017_5715
 
        ldp     x8, x30, [sp], #16
        ret
index c43f07ec154a8deeb10dce25770fe5d814f0b59c..11680a09dd09ef016613e23daa43b9c98da2e255 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -114,6 +114,36 @@ func cortex_a73_cluster_pwr_dwn
        b       cortex_a73_disable_smp
 endfunc cortex_a73_cluster_pwr_dwn
 
+func check_errata_cve_2017_5715
+#if WORKAROUND_CVE_2017_5715
+       mov     x0, #ERRATA_APPLIES
+#else
+       mov     x0, #ERRATA_MISSING
+#endif
+       ret
+endfunc check_errata_cve_2017_5715
+
+#if REPORT_ERRATA
+/*
+ * Errata printing function for Cortex A75. Must follow AAPCS.
+ */
+func cortex_a73_errata_report
+       stp     x8, x30, [sp, #-16]!
+
+       bl      cpu_get_rev_var
+       mov     x8, x0
+
+       /*
+        * Report all errata. The revision-variant information is passed to
+        * checking functions of each errata.
+        */
+       report_errata WORKAROUND_CVE_2017_5715, cortex_a73, cve_2017_5715
+
+       ldp     x8, x30, [sp], #16
+       ret
+endfunc cortex_a73_errata_report
+#endif
+
        /* ---------------------------------------------
         * This function provides cortex_a73 specific
         * register information for crash reporting.
index e66ad06670eb65b4df676164a67e0b0b2c706f1f..946f988434a462ee91675d649fbe272154c2e846 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -151,6 +151,27 @@ func cortex_a75_reset_func
        ret
 endfunc cortex_a75_reset_func
 
+func check_errata_cve_2017_5715
+       mrs     x0, id_aa64pfr0_el1
+       ubfx    x0, x0, #ID_AA64PFR0_CSV2_SHIFT, #ID_AA64PFR0_CSV2_LENGTH
+       /*
+        * If the field equals to 1 then branch targets trained in one
+        * context cannot affect speculative execution in a different context.
+        */
+       cmp     x0, #1
+       beq     1f
+
+#if WORKAROUND_CVE_2017_5715
+       mov     x0, #ERRATA_APPLIES
+#else
+       mov     x0, #ERRATA_MISSING
+#endif
+       ret
+1:
+       mov     x0, #ERRATA_NOT_APPLIES
+       ret
+endfunc check_errata_cve_2017_5715
+
        /* ---------------------------------------------
         * HW will do the cache maintenance while powering down
         * ---------------------------------------------
@@ -167,6 +188,27 @@ func cortex_a75_core_pwr_dwn
        ret
 endfunc cortex_a75_core_pwr_dwn
 
+#if REPORT_ERRATA
+/*
+ * Errata printing function for Cortex A75. Must follow AAPCS.
+ */
+func cortex_a75_errata_report
+       stp     x8, x30, [sp, #-16]!
+
+       bl      cpu_get_rev_var
+       mov     x8, x0
+
+       /*
+        * Report all errata. The revision-variant information is passed to
+        * checking functions of each errata.
+        */
+       report_errata WORKAROUND_CVE_2017_5715, cortex_a75, cve_2017_5715
+
+       ldp     x8, x30, [sp], #16
+       ret
+endfunc cortex_a75_errata_report
+#endif
+
        /* ---------------------------------------------
         * This function provides cortex_a75 specific
         * register information for crash reporting.